package com.ddm.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ddm.entity.webEntity.UserSubscribe;
import com.ddm.vo.webVo.SubscribeDetailVO;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * 用户订阅表数据访问接口
 */
@Mapper
public interface UserSubscribeMapper extends BaseMapper<UserSubscribe> {

    // 自定义：查询用户的订阅详情（关联套餐表）
    List<SubscribeDetailVO> selectUserSubscribeDetail(@Param("userId") Long userId);

    // 自定义：查询即将到期的订阅
    List<SubscribeDetailVO> selectExpiringSubscribes(@Param("days") Integer days);

    /**
     * 用注解写SQL
     * 根据 userId 和 subscriptionId 查询订阅记录
     */
    @Select("SELECT id AS subId " +
            "FROM subscription " +
            "WHERE user_id = #{userId} " +
            "  AND plan_id = #{planId} " +
            "  AND status = 1 " +
            "  AND start_date <= CURRENT_DATE() " +  // 开始日期 <= 当前日期（已生效）
            "  AND end_date >= CURRENT_DATE()")     // 结束日期 >= 当前日期（未过期）
    Long selectSubIdByUserIdAndPlanId(
            @Param("userId") Integer userId,
            @Param("planId") Integer planId  // 注意：参数名与SQL中的plan_id对应
    );


    int batchInsertExpiring(@Param("list") List<SubscribeDetailVO> expiringList);

    /**
     * 查询订阅到期提醒记录
     * @param params 包含查询条件的参数Map
     * @return 符合条件的订阅到期提醒列表
     */
    List<SubscribeDetailVO> selectExpiringSubscribesByParams(Map<String, Object> params);
}